//package com.ants.platform.core.db.mongodb;
//
//import com.ants.platform.core.bean.Page;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.data.mongodb.core.query.Query;
//import org.springframework.data.mongodb.core.query.Update;
//
//import javax.annotation.Resource;
//import java.util.List;
//
///**
// * Created by liushun on 2016/7/19.
// */
//public class BaseMongoDAOImpl<T> implements MongoDAO<T> {
//
//    private static final int DEFAULT_SKIP = 0;
//    private static final int DEFAULT_LIMIT = 200;
//
//
//    /**
//     * 注入mongodbTemplate
//     *
//     * @param mongoTemplate
//     */
//    @Resource(name = "sqlSessionTemplate")
//    private MongoTemplate mongoTemplate;
//
//    public List<T> find(Query query) {
//        return mongoTemplate.find(query, this.getEntityClass());
//    }
//
//    public T findOne(Query query) {
//        return mongoTemplate.findOne(query, this.getEntityClass());
//    }
//
//    public void update(Query query, Update update) {
//        mongoTemplate.findAndModify(query, update, this.getEntityClass());
//    }
//
//    public T save(T entity) {
//        mongoTemplate.insert(entity);
//        return entity;
//    }
//
//    public T findById(String id) {
//        return mongoTemplate.findById(id, this.getEntityClass());
//    }
//
//    public T findById(String id, String collectionName) {
//        return mongoTemplate.findById(id, this.getEntityClass(), collectionName);
//    }
//
//    public Page<T> findPage(Page<T> page, Query query) {
//        long count = this.count(query);
//        page.setTotalCount(count);
//        int pageNumber = page.getPageCurrent();
//        int pageSize = page.getPageSize();
//        query.skip((pageNumber - 1) * pageSize).limit(pageSize);
//        List<T> rows = this.find(query);
//        page.setTotalRows(rows);
//        return page;
//    }
//
//    public long count(Query query) {
//        return mongoTemplate.count(query, this.getEntityClass());
//    }
//
//    /**
//     * 获取需要操作的实体类class
//     *
//     * @return
//     */
//    private Class<T> getEntityClass() {
//        return ReflectionUtils.getSuperClassGenricType(getClass());
//    }
//
//}
